package utils

import (
	"encoding/json"
	"io/ioutil"
	"zinx-new/ziface"
)

// 存储 zinx 框架配置、参数

type GlobalObj struct {
	// 全局 server 对象
	TCPServer ziface.IServer
	Host      string
	TCPPort   int
	Name      string

	// zinx
	Version          string // 当前框架版本
	MaxPacketSize    uint32 // 最大数据包
	MaxConn          int    // 最大链接数
	WorkerPoolSize   uint32 // 工作池数量
	MaxWorkerTaskLen uint32 // worker 对应负责的任务最大任务存储数量
	// config
	ConfPath      string // 配置文件路径
	MaxMsgChanLen uint32 // 最大消息容量
}

// 定义一个全局的对象

var GlobalObject *GlobalObj

func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile(g.ConfPath)
	OkORPanic(err)
	err = json.Unmarshal(data, &GlobalObject)
	OkORPanic(err)
}

func OkORPanic(err error) {
	if err != nil {
		panic(err)
	}
}

func init() {
	GlobalObject = &GlobalObj{
		Name:             "Zinx",
		Version:          "V0.7",
		TCPPort:          7777,
		Host:             "0.0.0.0",
		MaxConn:          12000,
		MaxPacketSize:    4096,
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
		MaxMsgChanLen:    100,
		ConfPath:         "../conf/zinx.json",
	}
	GlobalObject.Reload()
}
